package com.example.hello.service;

import com.example.hello.dto.CommentDTO;
import com.example.hello.entity.Comment;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface CommentService {
    /**
     * 添加评论
     * @param commentDTO 评论信息
     * @param userId 用户ID
     * @return 添加结果
     */
    Comment addComment(CommentDTO commentDTO, Long userId);
    
    /**
     * 删除评论
     * @param commentId 评论ID
     * @param userId 用户ID
     * @return 删除结果
     */
    boolean deleteComment(Long commentId, Long userId);
    
    /**
     * 管理员删除评论
     * @param commentId 评论ID
     * @return 删除结果
     */
    boolean adminDeleteComment(Long commentId);
    
    /**
     * 获取评论详情
     * @param commentId 评论ID
     * @return 评论信息
     */
    Comment getCommentById(Long commentId);
    
    /**
     * 获取景点评论列表
     * @param attractionId 景点ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 评论列表
     */
    PageInfo<Comment> getCommentsByAttractionId(Long attractionId, Integer pageNum, Integer pageSize);
    
    /**
     * 获取用户评论列表
     * @param userId 用户ID
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 评论列表
     */
    PageInfo<Comment> getCommentsByUserId(Long userId, Integer pageNum, Integer pageSize);
    
    /**
     * 更新评论状态
     * @param commentId 评论ID
     * @param status 状态
     * @return 修改结果
     */
    boolean updateCommentStatus(Long commentId, Integer status);
    
    /**
     * 设置评论置顶
     * @param commentId 评论ID
     * @param isTop 是否置顶
     * @return 修改结果
     */
    boolean setCommentTop(Long commentId, Boolean isTop);
    
    /**
     * 点赞评论
     * @param commentId 评论ID
     * @return 操作结果
     */
    boolean likeComment(Long commentId);
    
    /**
     * 获取置顶评论
     * @param attractionId 景点ID
     * @return 置顶评论列表
     */
    List<Comment> getTopComments(Long attractionId);
    
    /**
     * 获取所有评论列表
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @param orderBy 排序字段
     * @param orderDirection 排序方向
     * @param status 状态筛选
     * @return 评论列表
     */
    PageInfo<Comment> getAllComments(Integer pageNum, Integer pageSize, String orderBy, String orderDirection, Integer status);
} 